<?php
// +----------------------------------------------------------------------
// | Author: wyd 2025/11/2
// | DESC: 
// +----------------------------------------------------------------------

declare (strict_types=1);

use Swoole\Coroutine\Channel;
use function Swoole\Coroutine\run;

//1、写入和读取数据 push\pop;

//run(function () {
//    $channel = new Channel(1); // 容量为1
//
//    // 先push一个数据，使通道满
//    $channel->push('first');
//
//    // 再push一个数据，设置超时为1秒，结果为false
//    $result = $channel->push('second', 1);
//    if ($result === false) {
//        echo "push超时，数据未写入\n";       //这里输出了
//    } else {
//        echo "push成功\n";
//    }
//    $res = $channel->pop();     //这里输出的结构是first;
//    var_dump($res);
//});


run(function () {
    $channel = new Channel(1); // 容量为1

    // 先push一个数据，使通道满
    $channel->push('first');

    // 获取通道状态
    $stats = $channel->stats();      // 统计信息
//    返回信息如下[
//        'consumer_num' => 0,  // 当前正在等待从通道读取数据的协程数量（即被pop操作阻塞的协程数）
//        'producer_num' => 0,  // 当前正在等待向通道写入数据的协程数量（即被push操作阻塞的协程数）
//        'queue_num' => 0,     // 当前通道中元素的数量（即队列中的元素个数）
//        'queue_bytes' => 0    // 当前通道中元素占用的内存大小（单位：字节）
//    ]

    $len = $channel->length();     // 当前元素数量
    $isEmpty = $channel->isEmpty();    // 是否为空
    $isFull = $channel->isFull();     // 是否已满

    var_dump($stats);
    var_dump($len);
    var_dump($isEmpty);
    var_dump($isFull);

    $res = $channel->close();      // 关闭通道
    var_dump($res);
    var_dump($stats);  // 注意：$stats 是之前获取的值，关闭通道不会改变它
});